import axios from "axios"
import router from "../router"
import Vue from "vue";

//公共url(服务器地址)
//超时时间
//请求头
//请求方法 get post put delete
//请求拦截 加载效果 特殊的请求头
//响应拦截 取消加载效果  错误码拦截
//状态码http

let baseUrl = "";
//利用node环境变量判断,用来区分开发\测试\生产(发布)环境
if (process.env.NODE_ENV === "development") {//开发
    baseUrl = "https://www.liulongbin.top:8888/api/private/v1/"
} else if (process.env.NODE_ENV === "production") {//发布
    baseUrl = "https://www.liulongbin.top:8888/api/private/v1/"
}

// axios 配置默认公共属性
const http = axios.create({
    baseURL: baseUrl,//默认前置url
    timeout: 5000, //默认请求超时事件
})

console.log(Vue.prototype.$loading)

//loading效果
const loadingObj = {
    loading: null,
    flag: 0
}
//请求拦截器
http.interceptors.request.use((config) => {
    console.log(loadingObj.flag)
    if(loadingObj.flag === 0){
        loadingObj.loading = Vue.prototype.$loading({
            lock: true,
            text: '正在努力加载...',
            spinner: 'el-icon-loading',
            background: 'rgba(0, 0, 0, 0.7)'
        });
    }
    loadingObj.flag++;
    //登录成功之后 后续请求都需要在请求头中携带token值才可以继续操作
    // 为请求头对象，添加 Token 验证的 Authorization 字段
    config.headers.Authorization = window.sessionStorage.getItem("token")
    return config
})
//响应拦截器
http.interceptors.response.use((config) => {
    loadingObj.flag--;
    if(loadingObj.flag === 0){
        loadingObj.loading.close();
    }
    //判断http状态
    switch (config.status) {
        case 200://成功状态
            let responseData = config.data;
            //成功后的状态码异常处理
            switch (responseData.meta.status) {
                case 404://后端返回code  404
                    router.push("/404")
                    console.log("跳转到404");
                    break;
                case 500://后端返回code  500
                    console.log("跳转到500");
                    break;
                case "token过期":
                    router.push("/login")
            }
            break;
        case 404://http404状态
            console.log("跳转到404");
            break;
        case 500://http500处理
            console.log("跳转到500");
            break;
    }
    return config
},(err)=>{
    return Promise.reject(Vue.prototype.$message.error(err))
})

export default http


